#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void func1(void);
void func2(void);
int main(void)
{
	func2();
	return 0;
}
/* 读取写端被关闭的管道  */
void func1(void)
{
	int fp[2];
	if(-1 == pipe(fp))
	{
		return;
	}
	int pid = fork();
	if(pid == -1)
	{
		perror("fork error");
		return;
	}
	else if(pid == 0)
	{
		close(fp[0]);
		write(fp[1],"I am child precess\n",19);
		close(fp[1]);
	}
	else
	{
		sleep(3);
		close(fp[1]);
		char c = '\0';
		while(1)
		{
			// 写端被关闭，读完管道中的数据后返回0，不会阻塞
			if(0 == read(fp[0],&c,1))
			{
				break;
			}
			printf("%c",c);
		}
		close(fp[0]);
	}
}
void sigpipe_handle(int sig)
{
	printf("I am sigpipe_handle\n");
	return;
}
/* 往读端被关闭的管道写入数据 */
void func2(void)
{
	int fp[2];
	pipe(fp);
	close(fp[1]);
	signal(SIGPIPE,sigpipe_handle);
	if(-1 == write(fp[0],"8",1))
	{
		perror("write pipe error");
		return;
	}
	close(fp[0]);
}
